package com.gidgabs.modules.dao;

import com.gidgabs.common.utils.Assist;
import com.gidgabs.modules.entity.TbProductEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 产品表
 * 
 * @author lanyonglin
 * @email www.baidu.com
 * @date 2018-07-02 11:03:07
 */
@Mapper
@Repository
public interface TbProductDao extends BaseDao<TbProductEntity> {

    TbProductEntity queryByObject(TbProductEntity productEntity);

    void updateBatch(Object[] id);


    /**
     * 获得TbProduct数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
     *
     * @param assist
     * @return
     */
    long getTbProductRowCount(Assist assist);

    /**
     * 获得TbProduct数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
     *
     * @param assist
     * @return
     */
    List<TbProductEntity> selectTbProduct(Assist assist);
    /**
     * 通过TbProduct的id获得TbProduct对象
     *
     * @param id
     * @return
     */
    TbProductEntity selectTbProductById(Integer id);

    /**
     * 获得一个TbProduct对象,以参数TbProduct对象中不为空的属性作为条件进行查询,返回符合条件的第一条
     *
     * @param obj
     * @return
     */
    TbProductEntity selectTbProductObjSingle(TbProductEntity obj);

    /**
     * 获得一个TbProduct对象,以参数TbProduct对象中不为空的属性作为条件进行查询
     *
     * @param obj
     * @return
     */
    List<TbProductEntity> selectTbProductByObj(TbProductEntity obj);

    /**
     * 插入TbProduct到数据库,包括null值
     *
     * @param value
     * @return
     */
    int insertTbProduct(TbProductEntity value);

    /**
     * 插入TbProduct中属性值不为null的数据到数据库
     *
     * @param value
     * @return
     */
    int insertNotNullTbProduct(TbProductEntity value);

    /**
     * 批量插入TbProduct到数据库,包括null值
     *
     * @param value
     * @return
     */
    int insertTbProductByBatch(List<TbProductEntity> value);
    /**
     * 通过TbProduct的id删除TbProduct
     *
     * @param id
     * @return
     */
    int deleteTbProductById(Integer id);

    /**
     * 通过辅助工具Assist的条件删除TbProduct
     *
     * @param assist
     * @return
     */
    int deleteTbProductByAssist(Assist assist);

    /**
     * 通过TbProduct的id更新TbProduct中的数据,包括null值
     *
     * @param enti
     * @return
     */
    int updateTbProductById(TbProductEntity enti);

    /**
     * 通过TbProduct的id更新TbProduct中属性不为null的数据
     *
     * @param enti
     * @return
     */
    int updateNotNullTbProductById(TbProductEntity enti);

    /**
     * 通过辅助工具Assist的条件更新TbProduct中的数据,包括null值
     *
     * @param value
     * @param assist
     * @return
     */
    int updateTbProduct(@Param("enti") TbProductEntity value, @Param("assist") Assist assist);

    /**
     * 通过辅助工具Assist的条件更新TbProduct中属性不为null的数据
     *
     * @param value
     * @param assist
     * @return
     */
    int updateNotNullTbProduct(@Param("enti") TbProductEntity value, @Param("assist") Assist assist);

    /**
     * 查询产品的转发数
     * @param productCode
     * @return
     */
    int selectForwardNumber(String productCode);

}
